// 导入Vue
import Vue from 'vue'
// 导入Vuex
import Vuex from 'vuex'
// 安装vuex
Vue.use(Vuex)

// 导入封装的操作的工具函数
import {
    saveToken,
    getToken,
    removeToken
} from '../utils/auth';

// 导入接口
import {
    userInfoAPI
} from "@/api";

// 导入router
import router from '@/router'
// 导入toast
import {
    Toast
} from 'vant'

// 实例化Vuex
const store = new Vuex.Store({

    state: {
        // 专门用来保存token的数据
        // 如果本地存储有值就拿本地存储的值
        // 如果没值，就给空对象
        tokenObj: getToken() || {},

        // 声明userInfo来保存用户资料
        // 只有null、undefined、0、空字符串、NaN是false,其他都是true
        userInfo: {}
    },

    mutations: {

        // 设置token
        setToken(state, tokenObj) {

            state.tokenObj = tokenObj
            // 也保存到本地存储
            saveToken(tokenObj)
        },

        // 用来修改userInfo的方法
        setUserInfo(state, info) {

            state.userInfo = info
        },

        // 专门做退出方法
        logout(state) {
            // 删除vuex里的token
            state.tokenObj = {}
            // 删除本地存储的token
            removeToken()
            // 还要删除vuex里的用户信息
            state.userInfo = {}
            // 弹出退出成功的提示
            Toast.success('退出成功')
            // 打回到登录页
            router.push('/login')
        }
    },

    actions: {

        // 封装请求用户信息的代码
        async reqUserInfo(context) {

            // 如果vuex里没有数据才发请求
            if (!context.state.userInfo.name) {

                // 发请求获取用户资料
                let res = await userInfoAPI();
                context.commit("setUserInfo", res.data.data);
            }
        }
    }

});

// 暴露这个对象
export default store